# coding: utf-8
# @Author: cyl
# @File: 01变量.py
# @Time: 2024/07/01 20:17:37

a = 100000000
"""
int 取值范围
int分为无符号整型和有符号整型
无符号: 从0开始的正整数 unit8(-127-128) unit16 uint32 uint64...
有符号：从～0到～00的整数 int8 int16 int32 int64...
python这类语言就为了偷懒, 搞了个int类型, 对于这类语言

int类型是动态的
a = 10 --- int8
a = 100000000 --- int64

python里面, int做了阉割, python只允许10位的int类型

a = "100000000000000000000000000"
print(int(a))
"""

b: str = "123456"
"""
加 减 替换 切片 性能
"""
c :str = "789"
d :str = b + c
print(d)  # 123456789

d2 : str = "xuxi"
e :str = '...'.join([b, c, d2])
print(e) # 123456...789...xuxi

# 常用: 读取txt文件, 文件中肯定有很多空格, 此时用replace把空格替换成空 -> r.replace(" ", "")
f :str = e.replace("...", "")
print(f) # 123456789xuxi

g :list = f.split("5")
print(g) # ['1234', '6789xuxi']

h = f[:4]
print(h) # 1234

# 切片默认从左开始
packageName :str = r"2024\12\12\12.zip"
print(packageName.split(".")[-1]) # zip -> python中切片 -1表示取最后一个元素

dirName :str = r"c:\\desktop:\\abc\\def\\123.txt"
print(dirName.split(".")[-1]) # txt

# rsplit从右边开始
dirName2 :str = r"c:\\desktop:\\ab.c\\de.f\\123.txt"
print(dirName2.rsplit(".")) # txt

k :str = f[::4] # ::相当于加了一个step
print(k) # 159i

# 所有语言中字符串的性能都比较差 -> 编译原理


"""
list 列表
列表、数组(js java c++...)区别
数组：一个同类型元素的集合
列表: 元素都是引用类型, 元素可以不同类型
append(extend) pop remove length enumerate insert
"""
abc :list = [1, 2, 3, 4, 5, 6, "100", "hhh"]
abc.append(10000)
print(abc)

print(abc.pop())

dec = abc.remove(1)
print(dec)

print(len(abc))

for ab in abc:
    print("ab:", ab)

abc.insert(1, "hello")
print(abc)

# 性能高
for index, value in enumerate(abc):
    print(f"{index}: {value}")


"""
dict
在其它语言中叫map, 字典的原型是map[k][v], k表示的类型, v表示的值
"""
request_params: dict = {
    "access-token": "123",
    "keep-alive": True,
    123: 123
}

# 以后不要用了
rp1: str = request_params["keep-alive"]

# 遍历items()
arr: list = []
for key, value in request_params.items():
    print(f"遍历: {key}: {value}")
    arr.append(value)
print("arr:", arr)

# keys() values()
print("keys:", request_params.keys())
print("values:", request_params.values())
for key in request_params.keys():
    print(f"key: {key}")

# get()
# 上游数据一般都是拼好的 空字典 一个一个通过接口去拼起来的数据字典
# 下游要用这个字典中的某个数据
# 假如上游的数据我没塞进去怎么办, 后面的接口如果拿不到值全部报错
# 通过调用get方法设置default值就避免了报错问题
rp2: str = request_params.get("keep-alive", False)

# set
request_params["yjj"] = "123456"
print(request_params) # {'access-token': '123', 'keep-alive': True, 123: 123, 'yjj': '123456'}

# 两个字典拼接（稍微多一点）、找共同值（不多）


# set(集合) 开始进阶操作: 在Python中, 集合（Set）、字典（Dictionary）、元组（Tuple）是无序的数据类型, 其中集合和字典的无序性是基于哈希表实现的
# 无序的数据类型在处理数据时可以提供更快的查找和插入速度, 同时也可以方便地进行集合运算和元素去重等操作
# 去重
# 为什么要做成无序
request_params: dict = {
    "access-token": "123",
    "keep-alive": True,
    "keep-alive": True,
    "keep-alive": True,
    "keep-alive": True,
    "keep-alive": True,
    "keep-alive": True,
    "keep-alive": True,
    "abc": [
        1, 2, 3, 4, 5, 6
    ]
}
abcd: list = [1, 1, 1, 1, 1, 10, 100, 1000, "abc", "abc", "abc"]
print(set(abcd)) # {1000, 1, 10, 100}

# tuple 元组, 也可以叫数组(列表), 但是他是一个不能修改的数组(列表)
abcde: tuple = (1, 2, 3, 4, 5, 6)
# 元组其实可以强制修改, 但是没有意义
# 传参会用的比较多, selenium.driver.element.move(point1).to(point2)
"""def siggle(doing: str, point: tuple):
    print(f"我正在: {doing}")
    print(f"移动了某个元素, 其坐标为{point}")
siggle("移动", (100, 100))
"""

